/*
 * 工具函数封装
 * @author Leriy
*/

/*
 * @desc 拼接带参 URL
 * @params {String} url - 链接
 * @params {Object} option - 参数
*/
export function handleUrl(url, option) {
    let str = url + '?'
    for (let i in option) {
        if (option[i] !== '') str += i + '=' + option[i] + '&'
    }
    return str.slice(0, str.length - 1)
}

/*
 * @desc 格式化日期时间
 * @params {String|Date|Number} oldDate - 日期时间
 * @params {String} fmt - 格式 yyyy-MM-dd hh:mm | yyyy-MM-dd | hh:mm
*/
export function formatDate(oldDate, fmt = 'yyyy-MM-dd hh:mm') {
    let date = new Date()
    oldDate = new Date(oldDate)
    if (typeof oldDate === 'string' || typeof oldDate === 'number') {
        date = new Date(+oldDate)
    } else {
        date = oldDate
    }
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    let o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate(),
        'h+': date.getHours(),
        'm+': date.getMinutes(),
        's+': date.getSeconds()
    }
    function padLeftZero(str) {
        return ('00' + str).substr(str.length)
    }
    for (let k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            let str = o[k] + ''
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
        }
    }
    return fmt
}

/*
 * @desc 无限层级结构扁平化
 * @params {Array} data - 要扁平化的数据
*/
export function flattenTree(data) {
    const result = []
    function flatten(node) {
        for (let i = 0; i < node.length; i++) {
            result.push({ ...node[i] })
            if (node[i].children && node[i].children.length > 0) flatten(node[i].children);
        }
    }

    flatten(data)
    return result;
}